#ifndef __M_TOPLOG_H__
#define __M_TOPLOG_H__
#include "unil.hpp"
#include "logs.hpp"
#include "format.hpp"
#include "mags.hpp"
#include "sink.hpp"
#include "logger.hpp"
#include "buffer.hpp"


namespace TopLog
{
    //获取单例对象
    Logger::ptr Getsingleton(const string &name)
    {
        return TopLog::LoggerManages::GetInstance().getLogger(name);
    }

    Logger::ptr Get_rootsingleton()
    {
         return TopLog::LoggerManages::GetInstance().getLoggerroot();
    }

    #define unknowns(fmt,...) unknowns(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define debug(fmt,...) debug(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define info(fmt,...) info(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define warning(fmt,...) warning(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define error(fmt,...) error(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define fatal(fmt,...) fatal(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define off(fmt,...) off(__FILE__,__LINE__,fmt,##__VA_ARGS__)


    #define UNKNOWNS(fmt,...) TopLog::Get_rootsingleton()->unknowns(fmt,##__VA_ARGS__)
    #define DEBUG(fmt,...) TopLog::Get_rootsingleton()->debug(fmt,##__VA_ARGS__)
    #define INFO(fmt,...) TopLog::Get_rootsingleton()->info(fmt,##__VA_ARGS__)
    #define WARNING(fmt,...) TopLog::Get_rootsingleton()->warning(fmt,##__VA_ARGS__)
    #define ERROR(fmt,...) TopLog::Get_rootsingleton()->error(fmt,##__VA_ARGS__)
    #define FATAL(fmt,...) TopLog::Get_rootsingleton()->fatal(fmt,##__VA_ARGS__)
    #define OFF(fmt,...) TopLog::Get_rootsingleton()->off(fmt,##__VA_ARGS__)


} // namespace TopLog
#endif